package application;

/**
*	@(#) Insert.java
*
*	Une commande concrete implementant l'interface Command.
*	Cette commande permet de realiser une insertion.
*
*	@see Command
*/
public class Insert implements Command {
	
	/**
	*	La chaine de caracteres que l'on veut inserer. 
	*/
	private String text;
	
	/**
	*	L'interface homme-machine sur laquelle est effectue l'insertion. 
	*/
	private UI ui;
	
	/**
	*	L'editeur sur lequel on veut realiser l'insertion. 
	*/
	private Editor editor;
	
	/**
	*	L'enregistreur dans lequel la commande sera enregistree.
	*/
	private Recorder recorder;
	
	/**
	*	Constructeur Insert.
	*/
	public Insert(UI ui,Editor editor, Recorder recorder) {
		this.ui=ui;
		this.editor=editor;
		this.recorder=recorder;
	}
	
	/**
	*	Lance l'execution d'une insertion.
	*/
	public void execute() {	
		text=ui.getTemp();
		editor.insert(text);
		recorder.record(this);
	}
	
	/**
	*	Lance l'execution d'une insertion et remet l'interface homme-machine a jour.
	*/
	public void executeM() {
		editor.insert(text);
		ui.refresh(editor.getBuffer().getText(), editor.getSelection().getBegin(), editor.getSelection().getEnd());
	}
	
	/** 
	*	@return La chaine de caracteres que l'on veut inserer.
	*/
	public String getText() {
		return text;
	}
	
	/**
	*	@return Un memento contenant l'etat actuel de la commande.
	*/
	public Memento getMemento() {
		Memento MemInsert=MementoInsert.create();
		State s=new State(text);
		MemInsert.setState(s);
		return MemInsert;
	}

	/**
	*	Restaure l'etat de cette commande.
	*
	*	@param memento
	*				Le memento contenant l'etat a restaurer.
	*/
	public void setMemento(Memento memento) {
		text=(String)memento.getState().getState();
	}

}
